﻿using InterviewAppPhone.Managers;
using InterviewAppPhone.QuizPhoneService;
using LibQuestionIsPhone.Models;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace InterviewAppPhone.ViewModels
{
    public class ListaPunteggiViewModel : BaseViewModel, INotifyPropertyChanged
    {
        public ObservableCollection<ListaPunteggio> ListaTipologie { get; set; }

        private ListaPunteggio _tipologiaSelezionata;

        public ListaPunteggio TipologiaSelezionata
        {
            get { return _tipologiaSelezionata; }
            set
            {
                _tipologiaSelezionata = value;
                if (ListaTipologie.First().IDTest == -1)
                    ListaTipologie.RemoveAt(0);
                OnPropertyChanged("TipologiaSelezionata");

            }
        }

        public ListaPunteggiViewModel()
        {
            ListaTipologie = new ObservableCollection<ListaPunteggio>();
        }

        public async void LoadPunteggi()
        {
            await GetListaPunteggi();
        }




        public async Task<bool> GetListaPunteggi()
        {
            IsCalculate = true;
            var client = new QuizServiceClient();
            var request = new GetListPunteggioRequest();
            client.GetAllListPunteggiPhoneCompleted += client_GetAllListPunteggiPhoneCompleted;
            client.GetAllListPunteggiPhoneAsync(request);
            return await Task.FromResult(true);
        }

        void client_GetAllListPunteggiPhoneCompleted(object sender, GetAllListPunteggiPhoneCompletedEventArgs e)
        {
            try
            {
                if (e.Error != null)
                    throw new Exception();
                var risultato = e.Result;
                foreach (var _tipologia in risultato.ListAllPunteggi)
                {
                    var tipologia = new ListaPunteggio()
                    {
                        IDTest = _tipologia.ListPunteggi.First().IdTipologiaTest,
                        NomeTest = _tipologia.ListPunteggi.First().TipologiaTest,
                    };
                    foreach (var punteggio in _tipologia.ListPunteggi)
                    {
                        tipologia.Punteggi.Add(new Punteggio()
                        {
                            Moltiplicatore = punteggio.Moltiplicatore,
                            Posizione = punteggio.Index,
                            PunteggioOttenuto = punteggio.Punteggio,
                            Utente = punteggio.UserName,
                        });
                    }
                    ListaTipologie.Add(tipologia);
                }
            }
            catch (Exception ex)
            {

            }
            finally
            {
                ListaTipologie.Insert(0, new ListaPunteggio() { IDTest = -1, NomeTest = "Scegli una tipologia" });
                IsCalculate = false;
            }
        }

        public override event PropertyChangedEventHandler PropertyChanged;
        public override void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }
    }
}
